#!/usr/bin/env node

const minimist = require('minimist');
const fs = require('fs');
const path = require('path');
const os = require('os');
const defaultDir = os.homedir() + "/Downloads";
const currentDir = process.cwd();
const HeicConvertCompress = require('./lib/convert.js');

class MainCli {
    constructor() {
        this.args = this.parseArgs();
        this.init();
    }

    parseArgs() {
        return minimist(process.argv.slice(2), {
            string: ['input', 'output', 'format', 'quality'],
            boolean: ['verbose', 'force', 'help', 'version'],
            alias: {
                v: 'verbose',
                F: 'force',
                h: 'help',
                V: 'version',
                i: 'input',
                o: 'output',
                f: 'format',
                q: 'quality'
            },
            default: {
                verbose: false,
                force: false,
                input: currentDir,
                output: currentDir+'/output',
                format: 'jpeg',
                quality: 0.15
            }
        });
    }

    init() {
        // 处理帮助和版本信息
        if (this.args.help) {
            this.showHelp();
            return;
        }

        if (this.args.version) {
            this.showVersion();
            return;
        }

        // 执行主逻辑
        this.run();
    }

    showHelp() {
        const helpText = `
heic-convert-compress Tool - 将 HEIC 图片转成更小的 JPEG 格式

用法:
  heic-convert-compress [选项] [文件...]

选项:
  -v, --verbose     详细输出模式
  -F, --force       强制操作，覆盖已存在文件
  -h, --help        显示帮助信息
  -V, --version     显示版本信息
  -i, --input       指定文件/文件夹 [默认：当前目录]
  -o, --output      导出文件/文件夹 [默认：当前目录/output]
  -f, --format      要压缩的文件格式 [默认：JPEG，支持：JPEG、PNG] 
  -q, --quality     压缩比率，在使用有损压缩时有效 JPEG [值有效范围：0-1]

示例:
  heic-convert-compress -i ~/Downloads -o ~/Downloads/output -f JPEG -q 0.15
  heic-convert-compress --help
`;
        console.log(helpText);
    }

    showVersion() {
        const pkg = require('./package.json');
        console.log(`v${pkg.version}`);
    }

    run() {
        const command = this.args._[0] || 'default';

        switch (command) {
            default:
                this.defaultAction();
        }
    }

    defaultAction() {
        new HeicConvertCompress(this.args.input, this.args.output, this.args.format, this.args.quality, this.args.verbose, this.args.force);
    }
}

// 启动 CLI
new MainCli();